<HTML>
<HEAD>
  <TITLE> DwField Man Page </TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H2>
  <FONT COLOR="navy"> NAME </FONT>
</H2>
<P>
DwField -- Class representing a MIME header field
<H2>
  <FONT COLOR="navy"> SYNOPSIS </FONT>
</H2>
<PRE>class DW_EXPORT DwField : public <A HREF="msgcmp.html">DwMessageComponent</A> {

    friend class DwHeaders;

public:

    <A HREF="field.html#DwField">DwField</A>();
    <A HREF="field.html#DwField">DwField</A>(const DwField&amp; aField);
    <A HREF="field.html#DwField">DwField</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
    virtual ~DwField();
    const DwField&amp; <A HREF="field.html#op_eq">operator =</A> (const DwField&amp; aField);
    virtual void <A HREF="field.html#Parse">Parse</A>();
    virtual void <A HREF="field.html#Assemble">Assemble</A>();
    virtual DwMessageComponent* <A HREF="field.html#Clone">Clone</A>() const;
    DwFieldBody* <A HREF="field.html#FieldBody">FieldBody</A>() const;
    const DwString&amp; <A HREF="field.html#FieldNameStr">FieldNameStr</A>() const;
    const DwString&amp; <A HREF="field.html#FieldBodyStr">FieldBodyStr</A>() const;
    DwField* <A HREF="field.html#Next">Next</A>() const;
    void <A HREF="field.html#SetFieldBody">SetFieldBody</A>(DwFieldBody* aFieldBody);
    void <A HREF="field.html#SetFieldNameStr">SetFieldNameStr</A>(const DwString&amp; aStr);
    void <A HREF="field.html#SetFieldBodyStr">SetFieldBodyStr</A>(const DwString&amp; aStr);
    void <A HREF="field.html#SetNext">SetNext</A>(const DwField* aField);
    static DwField* <A HREF="field.html#NewField">NewField</A>(const DwString&amp; aStr,
        DwMessageComponent* aParent);
    static DwFieldBody* <A HREF="field.html#CreateFieldBody">CreateFieldBody</A>(const DwString&amp; aFieldName,
        const DwString&amp; aFieldBody, DwMessageComponent* aParent);
    static DwFieldBody* _CreateFieldBody(const DwString&amp; aFieldName,
        const DwString&amp; aFieldBody, DwMessageComponent* aParent);
    static DwField* (*<A HREF="field.html#sNewField">sNewField</A>)(const DwString&amp;, DwMessageComponent*);
    static DwFieldBody* (*<A HREF="field.html#sCreateFieldBody">sCreateFieldBody</A>)(const DwString&amp; aFieldName,
        const DwString&amp; aFieldBody, DwMessageComponent* aParent);

protected:

    DwString mFieldNameStr;
    DwString mFieldBodyStr;
    DwFieldBody* mFieldBody;
    void <A HREF="field.html#_SetFieldBody">_SetFieldBody</A>(DwFieldBody* aFieldBody);

public:

    virtual void <A HREF="field.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
    virtual void <A HREF="field.html#CheckInvariants">CheckInvariants</A>() const;

protected:

    void _PrintDebugInfo(ostream&amp; aStrm) const;
};
</PRE>
<H2>
  <FONT COLOR="navy"> DESCRIPTION </FONT>
</H2>
<P>
<B><TT>DwField</TT></B> represents a header field as described in RFC-822.
According to RFC-822, a field contains a field name and a field body. In
MIME++, a <B><TT>DwField</TT></B> contains three elements: a
<B><TT><A HREF="string.html">DwString</A></TT></B> that contains its field
name, a <B><TT>DwString</TT></B> that contains its field body, and a
<B><TT><A HREF="fieldbdy.html">DwFieldBody</A></TT></B> object that contains
a broken-down (that is, parsed) version of its field body.
<P>
In the tree (broken-down) representation of message, a
<B><TT>DwField</TT></B> object is always an intermediate node, having a parent
node and a single child node. The parent node is the
<B><TT><A HREF="headers.html">DwHeaders</A></TT></B> object that contains
it. The child node is the <B><TT>DwFieldBody</TT></B> object it contains.
<P>
To get and set the field name, use the member functions
<B><TT>FieldNameStr()</TT></B> and <B><TT>SetFieldNameStr()</TT></B>. To
get and set the field body, use the member functions
<B><TT>FieldBodyStr()</TT></B> and <B><TT>SetFieldBodyStr()</TT></B>. To
get and set the <B><TT>DwFieldBody</TT></B> object, use
<B><TT>FieldBody()</TT></B> and <B><TT>SetFieldBody()</TT></B>.
<P>
A <B><TT>DwField</TT></B> object can be included in a list of
<B><TT>DwField</TT></B> objects; usually this is the list of
<B><TT>DwField</TT></B> objects maintained by its parent
<B><TT>DwHeaders</TT></B> object. To get the next <B><TT>DwField</TT></B>
object in a list, use the member function <B><TT>Next()</TT></B>.
<H2>
  <FONT COLOR="navy"> Public Member Functions </FONT>
</H2>
<P>
<FONT COLOR="teal"><B> <A NAME="DwField">DwField</A>() <BR>
DwField(const DwField&amp; aField) <BR>
DwField(const DwString&amp; aStr, DwMessageComponent* aParent=0) </B></FONT>
<P>
The first constructor is the default constructor, which sets the
<B><TT>DwField</TT></B> object's field name and field body to the empty string,
set its parent to <B><TT>NULL</TT></B>, and sets its
<B><TT>DwFieldBody</TT></B> object to <B><TT>NULL</TT></B>.
<P>
The second constructor is the copy constructor, which performs a deep copy
of <B><TT>aField</TT></B>. The parent of the new <B><TT>DwField</TT></B>
object is set to <B><TT>NULL</TT></B>.
<P>
The third constructor copies <B><TT>aStr</TT></B> to the
<B><TT>DwField</TT></B> object's string representation and sets
<B><TT>aParent</TT></B> as its parent. The virtual member function
<B><TT>Parse()</TT></B> should be called immediately after this constructor
in order to parse the string representation. Unless it is
<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
a class derived from <B><TT>DwHeaders</TT></B>.
<P>
<FONT COLOR="teal"><B> const DwField&amp; <A NAME="op_eq">operator =</A>
(const DwField&amp; aField) </B></FONT>
<P>
This is the assignment operator, which performs a deep copy of
<B><TT>aField</TT></B>. The parent node of the <B><TT>DwField</TT></B> object
is not changed.
<P>
<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
<P>
This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
executes the parse method for <B><TT>DwField</TT></B> objects. The parse
method creates or updates the broken-down representation from the string
representation. For <B><TT>DwField</TT></B> objects, the parse method parses
the string representation, sets the values of the field name string and the
field body string, and creates an instance of the appropriate subclass of
<B><TT>DwFieldBody</TT></B>. This member function also calls the
<B><TT>Parse()</TT></B> member function of its contained
<B><TT>DwFieldBody</TT></B> object.
<P>
You should call this member function after you set or modify the string
representation, and before you access the field name, the field body, or
the contained <B><TT>DwFieldBody</TT></B> object.
<P>
This function clears the is-modified flag.
<P>
<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
</B></FONT>
<P>
This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
executes the assemble method for <B><TT>DwField</TT></B> objects. The assemble
method creates or updates the string representation from the broken-down
representation. In more concrete terms, the assemble method builds the string
representation from the field name and the string representation of the contained
<B><TT>DwFieldBody</TT></B> object. This member function calls the
<B><TT>Assemble()</TT></B> member function of its contained
<B><TT>DwFieldBody</TT></B> object.
<P>
You should call this member function after you modify either the field name
or the contained <B><TT>DwFieldBody</TT></B> object, and before you retrieve
the string representation.
<P>
This function clears the is-modified flag.
<P>
<FONT COLOR="teal"><B> virtual DwMessageComponent*
<A NAME="Clone">Clone</A>() const </B></FONT>
<P>
This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
creates a new <B><TT>DwField</TT></B> on the free store that has the same
value as this <B><TT>DwField</TT></B> object. The basic idea is that of a
virtual copy constructor.
<P>
<FONT COLOR="teal"><B> Dw<A NAME="FieldBody">FieldBody</A>* FieldBody() const
</B></FONT>
<P>
Returns the <B><TT>DwFieldBody</TT></B> object contained by this
<B><TT>DwField</TT></B> object. If there is no field body,
<B><TT>NULL</TT></B> will be returned.
<P>
<FONT COLOR="teal"><B> const DwString&amp;
<A NAME="FieldNameStr">FieldNameStr</A>() const </B></FONT>
<P>
Returns the field name of this header field as a string.
<P>
<FONT COLOR="teal"><B> const DwString&amp;
<A NAME="FieldBodyStr">FieldBodyStr</A>() const </B></FONT>
<P>
Returns the field body of this header field as a string.
<P>
<FONT COLOR="teal"><B> DwField* <A NAME="Next">Next</A>() const </B></FONT>
<P>
Returns the next <B><TT>DwField</TT></B> object following this
<B><TT>DwField</TT></B> object in the list contained in a
<B><TT>DwHeaders</TT></B>. Returns <B><TT>NULL</TT></B> if this object is
last in the list.
<P>
<FONT COLOR="teal"><B> void
<A NAME="SetFieldBody">SetFieldBody</A>(DwFieldBody* aFieldBody) </B></FONT>
<P>
Sets the <B><TT>DwFieldBody</TT></B> object contained by this object.
<P>
<FONT COLOR="teal"><B> void
<A NAME="SetFieldNameStr">SetFieldNameStr</A>(const DwString&amp; aStr)
</B></FONT>
<P>
Sets the field name of this header field.
<P>
<FONT COLOR="teal"><B> void
<A NAME="SetFieldBodyStr">SetFieldBodyStr</A>(const DwString&amp; aStr)
</B></FONT>
<P>
Sets the field body of this header field.
<P>
<FONT COLOR="teal"><B> void <A NAME="SetNext">SetNext</A>(const DwField*
aField) </B></FONT>
<P>
This <I>advanced</I> function sets <B><TT>aField</TT></B> as the next field
following this field in the list of fields contained in the headers. Since
<B><TT>DwHeaders</TT></B> contains member functions for adding
<B><TT>DwField</TT></B> objects to its list, this function should be avoided
for most applications.
<P>
<FONT COLOR="teal"><B> static DwField* <A NAME="NewField">NewField</A>(const
DwString&amp; aStr, DwMessageComponent* aParent) </B></FONT>
<P>
Creates a new <B><TT>DwField</TT></B> object on the free store. If the static
data member <B><TT>sNewField</TT></B> is <B><TT>NULL</TT></B>, this member
function will create a new <B><TT>DwField</TT></B> and return it. Otherwise,
<B><TT>NewField()</TT></B> will call the user-supplied function pointed to
by <B><TT>sNewField</TT></B>, which is assumed to return an object from a
class derived from <B><TT>DwField</TT></B>, and return that object.
<P>
<FONT COLOR="teal"><B> static DwFieldBody*
<A NAME="CreateFieldBody">CreateFieldBody</A>(const DwString&amp; aFieldName,
const DwString&amp; aFieldBody, DwMessageComponent* aParent) </B></FONT>
<P>
The static member function <B><TT>CreateFieldBody()</TT></B> is called from
the <B><TT>Parse()</TT></B> member function and is responsible for creating
a <B><TT>DwFieldBody</TT></B> object for this particular field. A typical
scenario might go as follows: This member function examines the field name
for this field, finds that it contains "To", creates a
<B><TT>DwAddressList</TT></B> object to contain the field body, calls the
<B><TT>Parse()</TT></B> member function for the
<B><TT>DwAddressList</TT></B>, and sets the <B><TT>DwAddressList</TT></B>
object as this <B><TT>DwField</TT></B> object's
<B><TT>DwFieldBody</TT></B>.
<P>
If you want to override the behavior of
<B><TT>CreateFieldBody()</TT></B>, you can do so by setting the public data
member <B><TT>sCreateFieldBody</TT></B> to point to your own function.
<B><TT>CreateFieldBody()</TT></B> first checks to see if
<B><TT>sCreateFieldBody</TT></B> is <B><TT>NULL</TT></B>. If it is not,
<B><TT>CreateFieldBody()</TT></B> will assume that it points to a user-supplied
function and will call that function. If it is <B><TT>NULL</TT></B>,
<B><TT>CreateFieldBody()</TT></B> will call
<B><TT>_CreateFieldBody()</TT></B>, which actually creates the
<B><TT>DwFieldBody</TT></B> object. You may call
<B><TT>_CreateFieldBody()</TT></B> from your own function for fields you
do not wish to handle.
<P>
<FONT COLOR="teal"><B> virtual void
<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
const </B></FONT>
<P>
This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
prints debugging information about this object to <B><TT>aStrm</TT></B>.
It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
components down to a level of <B><TT>aDepth</TT></B>.
<P>
This member function is available only in the debug version of the library.
<P>
<FONT COLOR="teal"><B> virtual void
<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
<P>
Aborts if one of the invariants of the object fails. Use this member function
to track down bugs.
<P>
This member function is available only in the debug version of the library.
<H2>
  <FONT COLOR="navy"> Public Data Members </FONT>
</H2>
<P>
<FONT COLOR="teal"><B> static DwField*
(*<A NAME="sNewField">sNewField</A>)(const DwString&amp;, DwMessageComponent*)
</B></FONT>
<P>
If <B><TT>sNewField</TT></B> is not <B><TT>NULL</TT></B>, it is assumed to
point to a user-supplied function that returns an object from a class derived
from <B><TT>DwField</TT></B>.
<P>
<FONT COLOR="teal"><B> static DwFieldBody*
(*<A NAME="sCreateFieldBody">sCreateFieldBody</A>)(const DwString&amp;
aFieldName, const DwString&amp; aFieldBody, DwMessageComponent* aParent)
</B></FONT>
<P>
See <B><TT><A HREF="#CreateFieldBody">CreateFieldBody</A>()</TT></B>.
<H2>
  <FONT COLOR="navy"> Protected Member Functions </FONT>
</H2>
<P>
<FONT COLOR="teal"><B> void
<A NAME="_SetFieldBody">_SetFieldBody</A>(DwFieldBody* aFieldBody)
</B></FONT>
<P>
Sets the <B><TT>DwFieldBody</TT></B> object contained by this object. This
function differs from <B><TT>SetFieldBody()</TT></B> in that it does not
set the is-modified flag.
<P>
</BODY></HTML>
